/**
 * 仓库管理表单校验工具函数
 * 统一处理仓库相关业务的表单验证
 */

/**
 * 数字校验
 * @param {number|string} value 数值
 * @returns {boolean} 是否有效
 */
export function validateNumber(value) {
  const num = Number(value)
  return !isNaN(num) && num >= 0
}

/**
 * 校验重量（最多3位小数）
 * @param {number|string} weight 重量值
 * @returns {boolean} 是否有效
 */
export function validateWeight(weight) {
  if (!validateNumber(weight)) {
    return false
  }
  
  // 检查小数位数
  const weightStr = weight.toString()
  const decimalPart = weightStr.split('.')[1]
  
  if (decimalPart && decimalPart.length > 3) {
    return false
  }
  
  return true
}

/**
 * 校验数量
 * @param {number|string} count 数量值
 * @returns {boolean} 是否有效
 */
export function validateCount(count) {
  if (!validateNumber(count)) {
    return false
  }
  
  // 数量必须为整数或合理的小数
  const num = Number(count)
  return num >= 0
}

/**
 * 校验红冲数据
 * @param {Object} data 红冲数据
 * @param {number} data.weight 重量
 * @param {number} data.count 数量
 * @returns {Object} 校验结果 {valid: boolean, message: string}
 */
export function validateReverseData(data) {
  if (!data || !data.weight || !data.count) {
    return {
      valid: false,
      message: '重量和数量不能为空'
    }
  }
  
  if (!validateWeight(data.weight)) {
    return {
      valid: false,
      message: '重量格式不正确，请输入非负数且最多保留3位小数'
    }
  }
  
  if (!validateCount(data.count)) {
    return {
      valid: false,
      message: '数量格式不正确，请输入非负数'
    }
  }
  
  return {
    valid: true,
    message: ''
  }
}

/**
 * 显示校验错误提示
 * @param {string} message 错误信息
 */
export function showValidationError(message) {
  uni.showToast({
    title: message,
    icon: 'none',
    duration: 2000
  })
}

/**
 * 校验物料编码
 * @param {string} materialCode 物料编码
 * @returns {boolean} 是否有效
 */
export function validateMaterialCode(materialCode) {
  if (!materialCode || typeof materialCode !== 'string') return false
  
  // 物料编码格式：字母数字组合，长度4-20位
  const pattern = /^[A-Za-z0-9]{4,20}$/
  return pattern.test(materialCode.trim())
}

/**
 * 校验仓库编码
 * @param {string} warehouseCode 仓库编码
 * @returns {boolean} 是否有效
 */
export function validateWarehouseCode(warehouseCode) {
  if (!warehouseCode || typeof warehouseCode !== 'string') return false
  
  // 仓库编码格式：字母数字组合，长度2-10位
  const pattern = /^[A-Za-z0-9]{2,10}$/
  return pattern.test(warehouseCode.trim())
}

/**
 * 校验出库数量范围
 * @param {number|string} quantity 出库数量
 * @param {number} availableStock 可用库存
 * @param {number} minQuantity 最小出库数量
 * @param {number} maxQuantity 最大出库数量
 * @returns {Object} 校验结果 {valid: boolean, message: string}
 */
export function validateOutboundQuantity(quantity, availableStock, minQuantity = 0, maxQuantity = Infinity) {
  if (quantity === null || quantity === undefined || quantity === '') {
    return { valid: false, message: '出库数量不能为空' }
  }
  
  const num = parseFloat(quantity)
  if (isNaN(num)) {
    return { valid: false, message: '出库数量必须是数字' }
  }
  
  if (num <= minQuantity) {
    return { valid: false, message: `出库数量必须大于${minQuantity}` }
  }
  
  if (num > availableStock) {
    return { valid: false, message: '出库数量不能大于可用库存' }
  }
  
  if (num > maxQuantity) {
    return { valid: false, message: `出库数量不能超过${maxQuantity}` }
  }
  
  return { valid: true, value: num }
}